package com.central.user.controller;

import com.central.common.annotation.LoginUser;
import com.central.common.model.Result;
import com.central.common.model.SysUser;
import com.central.user.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;

/**
 * 用户
 *
 * @author ly
 */
@Slf4j
@RestController
@Api(tags = "用户模块api")
@RefreshScope
public class SysUserController {

    @Autowired
    private ISysUserService userService;

    /**
     * 通过id得到用户信息
     *
     * @param id
     * @return
     */
    @GetMapping("/users/{id}")
    public SysUser findUserById(@PathVariable Long id) {
        return userService.findUserById(id);
    }

    /**
     * 当前登录用户 LoginAppUser
     *
     * @return
     */
    @ApiOperation(value = "根据access_token当前登录用户")
    @GetMapping("/users/current")
    public Result<SysUser> getLoginAppUser(@LoginUser(isFull = true) SysUser user, HttpServletRequest request) {
        System.out.println(request.getContentType());
        Enumeration enu = request.getParameterNames();
        while (enu.hasMoreElements()) {
            String paraName = (String) enu.nextElement();
            log.info(paraName + ": " + request.getParameter(paraName));
        }
        return Result.succeed(userService.getLoginAppUser(user));
    }

    /**
     * ============= 测试 nacos 统一配置中心，正式环境可以删除此部分代码 start ========
     */

    // 如果没有加入此字段配置，所以需要设定默认值，就不报错了
    @Value("${nacos.config.center.test.age:10}")
    private String age;

    @Value("${spring.application.name}")
    private String serverName;

    /**
     * 注意这里的 port 刷新可能有点和想象的不一样，
     * 1. 本地 idea 调试，开启 2 个端口的 user-center
     * 2. RefreshScope 注解
     * 3. 更改 nacos 配置
     * 4. 发现 port 都是最后一次修改的端口了，因为加了 @RefreshScope 注解的原因，port 都被刷新了。
     * 5. 测试应该是通用配置熟悉，而且生产尽量不要使用特定的属性。
     */
    @Value("${server.port}")
    private String port;

    @ApiOperation(value = "测试 nacos 配置中心")
    @GetMapping("/testNacos")
    public Result testNacos(String name) {
        log.info("execute.." + port);
        return Result.succeed(serverName + ":" + port + "；配置：" + name + "；" + age);
    }
    /**
     * ============= 测试 nacos 统一配置中心，正式环境可以删除此部分代码 end ========
     */
}
